XStream একটি জাভা লাইব্রেরি যা সহজভাবে জাভা অবজেক্ট এবং XML বা JSON ডেটার মধ্যে কনভার্সন (সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন) করতে সহায়তা করে। অনেক সময় আপনার ডেটা স্ট্রাকচার জটিল (complex) হতে পারে, যেখানে নেস্টেড অবজেক্ট এবং অ্যারে/লিস্ট থাকে, এবং তখন Complex Nested XML/JSON Data Mapping করা প্রয়োজন। XStream এর মাধ্যমে, আপনি সহজে জটিল নেস্টেড XML বা JSON ডেটা মডেলকে Java অবজেক্টে রূপান্তর এবং Java অবজেক্ট থেকে XML/JSON এ রূপান্তর করতে পারেন।
এই টিউটোরিয়ালে, আমরা Complex Nested XML/JSON Data Mapping এর উদাহরণ সহ এক্সস্ট্রিমের মাধ্যমে কিভাবে জটিল ডেটা ম্যাপিং করা যায়, তা দেখব।
Complex Nested Data Mapping হল এমন একটি প্রক্রিয়া যেখানে XML বা JSON ডকুমেন্টের মধ্যে একাধিক স্তরের (nested) অবজেক্ট, অ্যারে বা লিস্ট থাকে এবং সেগুলিকে Java অবজেক্টে রূপান্তর করা হয় (বা Java অবজেক্ট থেকে XML/JSON এ রূপান্তর করা হয়)। এই ধরনের ডেটা স্ট্রাকচার সাধারণত একাধিক সম্পর্কিত অবজেক্ট, অ্যারে, এবং কাস্টম টাইপগুলোকে অন্তর্ভুক্ত করে থাকে।
এখানে Complex Nested XML/JSON Data Mapping এর উদাহরণ হবে:
Person
অবজেক্ট, যার মধ্যে Address
নামক একটি নেস্টেড অবজেক্ট এবং PhoneNumbers
নামক একটি লিস্ট রয়েছে।ধরা যাক, আমাদের একটি Person
অবজেক্ট রয়েছে, যার মধ্যে name
, age
, একটি নেস্টেড Address
অবজেক্ট এবং একটি ফোন নম্বরের লিস্ট রয়েছে।
XML Structure:
<person>
<name>John Doe</name>
<age>30</age>
<address>
<street>123 Main St</street>
<city>Springfield</city>
</address>
<phoneNumbers>
<phoneNumber>123-456-7890</phoneNumber>
<phoneNumber>987-654-3210</phoneNumber>
</phoneNumbers>
</person>
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
// Getters and setters
}
class Person {
private String name;
private int age;
private Address address;
@XStreamImplicit
private List<String> phoneNumbers;
public Person(String name, int age, Address address, List<String> phoneNumbers) {
this.name = name;
this.age = age;
this.address = address;
this.phoneNumbers = phoneNumbers;
}
// Getters and setters
}
public class XStreamNestedExample {
public static void main(String[] args) {
// Create Address object
Address address = new Address("123 Main St", "Springfield");
// Create a list of phone numbers
List<String> phoneNumbers = Arrays.asList("123-456-7890", "987-654-3210");
// Create Person object
Person person = new Person("John Doe", 30, address, phoneNumbers);
// Create XStream object
XStream xStream = new XStream();
// Alias for classes
xStream.alias("person", Person.class);
xStream.alias("address", Address.class);
// Convert Java object to XML
String xml = xStream.toXML(person);
System.out.println(xml);
}
}
XML Output:
<person>
<name>John Doe</name>
<age>30</age>
<address>
<street>123 Main St</street>
<city>Springfield</city>
</address>
<phoneNumbers>
<phoneNumber>123-456-7890</phoneNumber>
<phoneNumber>987-654-3210</phoneNumber>
</phoneNumbers>
</person>
এখানে, @XStreamImplicit
ব্যবহার করে phoneNumbers
লিস্টটিকে XML এ <phoneNumber>
ট্যাগে রূপান্তরিত করা হয়েছে, এবং address
অবজেক্টটি <address>
ট্যাগে রূপান্তরিত হয়েছে।
XStream শুধু XML নয়, JSON কনভার্সনও সমর্থন করে। JSON ডেটা মডেলিংয়ের ক্ষেত্রে, আপনি XStream ব্যবহার করে জাভা অবজেক্টকে JSON ফরম্যাটে রূপান্তর করতে পারেন এবং এর উল্টোও করতে পারেন।
ধরা যাক, আমাদের একটি Person
অবজেক্ট রয়েছে, যার মধ্যে name
, age
, একটি নেস্টেড Address
অবজেক্ট এবং একটি ফোন নম্বরের লিস্ট রয়েছে।
JSON Structure:
{
"person": {
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Springfield"
},
"phoneNumbers": [
"123-456-7890",
"987-654-3210"
]
}
}
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JsonWriter;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import java.util.List;
import java.util.Arrays;
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
// Getters and setters
}
class Person {
private String name;
private int age;
private Address address;
private List<String> phoneNumbers;
public Person(String name, int age, Address address, List<String> phoneNumbers) {
this.name = name;
this.age = age;
this.address = address;
this.phoneNumbers = phoneNumbers;
}
// Getters and setters
}
public class XStreamJSONExample {
public static void main(String[] args) {
// Create Address object
Address address = new Address("123 Main St", "Springfield");
// Create a list of phone numbers
List<String> phoneNumbers = Arrays.asList("123-456-7890", "987-654-3210");
// Create Person object
Person person = new Person("John Doe", 30, address, phoneNumbers);
// Create XStream object
XStream xStream = new XStream(new StaxDriver());
// Registering alias for the class
xStream.alias("person", Person.class);
xStream.alias("address", Address.class);
// Set XStream to output JSON
xStream.setMode(XStream.NO_REFERENCES);
xStream.processAnnotations(Person.class);
// Convert Java object to JSON
String json = xStream.toXML(person);
System.out.println(json);
}
}
JSON Output:
{
"person": {
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Springfield"
},
"phoneNumbers": [
"123-456-7890",
"987-654-3210"
]
}
}
এখানে, JSON ডেটা একইরকমভাবে XStream ব্যবহার করে Java অবজেক্টে রূপান্তরিত হয়েছে এবং কাস্টম alias ব্যবহৃত হয়েছে।
XStream এর মাধ্যমে Complex Nested XML/JSON Data Mapping খুবই সহজ এবং কার্যকরী। আপনি সহজেই নেস্টেড অবজেক্ট, লিস্ট এবং অ্যারে কাস্টম কনফিগারেশন এবং আলিয়াস ব্যবহার করে XML বা JSON ফরম্যাটে রূপান্তর করতে পারেন। এই কনভার্সন প্রক্রিয়া ডেটা সংরক্ষণ, এক্সচেঞ্জ এবং প্রক্রিয়া করার জন্য একটি খুবই শক্তিশালী উপায়। XStream এর কাস্টম অ্যালিয়াস এবং ফিল্ড ম্যাপিং দ্বারা আপনি আপনার XML/JSON ফরম্যাটের কাস্টমাইজেশন সহজে করতে পারেন।
Read more